#ifndef __MOTOR_H
#define __MOTOR_H

#include "stdint.h"
#include "tim.h"
#include "pid.h"

#define RR 30u    //电机减速比，GM37-550
#define RELOADVALUE __HAL_TIM_GetAutoreload(&htim2)    //获取自动装载值
#define COUNTERNUM __HAL_TIM_GetCounter(&htim2)        //获取编码器定时器中的计数值

#define INA1(state) HAL_GPIO_WritePin(GPIOA,GPIO_PIN_11,(GPIO_PinState)(state))    
#define INB1(state) HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,(GPIO_PinState)(state))    
#define INA2(state) HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12,(GPIO_PinState)(state))    
#define INB2(state) HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,(GPIO_PinState)(state))    


typedef struct Motor
{
	int32_t lastAngle;        //上10ms转过的角度
	int32_t totalAngle;       //总的角度
	int16_t loopNum;          //溢出次数计数值
	float speed;              //电机输出轴目前转速,单位为RPM
	float speed_Left;         // 左轮当前速度
    float speed_Right;        // 右轮当前速度
	float targetSpeed;       //添加设定的目标速度
  float MeasureSpeed_Left;  // 左轮目标速度
  float MeasureSpeed_Right; // 右轮目标速度
} MotorInstance;

extern MotorInstance Motor_data; //电机数据结构体
extern PID_Init_Config_s Left_Motor_config;
extern PID_Init_Config_s Right_Motor_config;

void Motor_Init(void);
void Encoder_Init(void);
void Motor_Send(void);

#endif
